package com.ma.DataStruct.trietree;

import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*设计一个 map ，满足以下几点:

        字符串表示键，整数表示值
        返回具有前缀等于给定字符串的键的值的总和
        实现一个 MapSum 类：

        MapSum() 初始化 MapSum 对象
        void insert(String key, int val) 插入 key-val 键值对，字符串表示键 key ，整数表示值 val 。
                    如果键 key 已经存在，那么原来的键值对key-value将被替代成新的键值对。
        int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。
*/
public class Solution677 {
    public static void main(String[] args) {
        MapSum mapSum = new MapSum();
        mapSum.insert("apple", 3);
        System.out.println(mapSum.sum("ap"));           // 返回 3 (apple = 3)
        mapSum.insert("app", 2);
        System.out.println(mapSum.sum("ap"));           // 返回 5 (apple + app = 3 + 2 = 5)
    }
}
class MapSum {
    Map<String,Integer> map;

    public MapSum() {
        map = new HashMap<>();
    }

    public void insert(String key, int val) {
        map.put(key,val);
    }

    public int sum(String prefix) {
        int sum = 0;
        Set<String> set = map.keySet();
        for(String s : set){
            if(isPrefix(s,prefix)){
                sum+=map.get(s);
            }
        }
        return sum;
    }

    public static boolean isPrefix(String word, String prefix){
        char[] ta = word.toCharArray();
        char[] pa = prefix.toCharArray();
        int po = 0;
        int pl = 0;
        int pc = pa.length;
        if ( (0 > ta.length - pc)) {
            return false;
        }
        while (--pc >= 0) {
            if (ta[pl++] != pa[po++]) {
                return false;
            }
        }
        return true;
    }
}
